'''
@-*- coding: utf-8 -*-
@ python:python 3.9
@ 创建人员:allen
@ 创建时间:2024/8/22
'''
# from snap7.client import Client
#
# # 创建一个S7客户端并连接到PLC
# client = Client()
# client.connect('192.168.0.1', 0, 1)  # 使用您的PLC的IP地址和端口
#
# # 定义要读取的区域
# area_id = 5  # 数据块编号
# start_offset = 0  # 开始偏移量
# size = 100  # 要读取的大小（以字节为单位）
#
# # 读取整个区域
# data = client.db_read(area_id, start_offset, size)
#
# # 打印读取到的数据
# print(f"数据块 {area_id} 的内容:")
# for i in range(0, len(data), 2):  # 假设数据是16位的
#     value = data[i] + (data[i + 1] << 8)
#     print(f"偏移量 {start_offset + i}: {value}")
#
# # 断开与PLC的连接
# client.disconnect()

from snap7.client import Client

def detect_data_type(data):
    """
    根据数据内容自动检测数据类型。
    """
    if len(data) == 1:
        if data[0] == 0:
            return "布尔值", False
        else:
            return "整数", data[0]
    elif len(data) == 2:
        int_value = data[0] + (data[1] << 8)
        return "整数", int_value
    elif len(data) == 4:
        float_value = (data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24)) / 2**24
        return "浮点数", float_value
    else:
        return "未知", None

# 创建一个S7客户端并连接到PLC
client = Client()
client.connect('192.168.0.1', 0, 1)  # 使用您的PLC的IP地址和端口

# 定义要读取的数据块和偏移
db_number = 6  # 数据块编号
offset = 6  # 偏移量
size = 0 # 要读取的大小（以字节为单位）

# 读取数据
data = client.db_read(db_number, offset, size)

# 自动检测数据类型
data_type, value = detect_data_type(data)
print(f"数据类型: {data_type}, 值: {value}")

# 断开与PLC的连接
client.disconnect()